﻿using System;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Windows.Forms;

namespace Operacional
{
    public partial class frmLinhas : Form
    {
        #region Declarações
        public static string numLinha;
        public static SqlDataAdapter daLinhas = new SqlDataAdapter("Select * from Linhas", frmEntrada.Conn);
        public static DataView dvTarefas, dvLinhas_Tarefas;
        frmTarefas EcraTarefas = new frmTarefas();
        frmManutencao Manutenção = new frmManutencao();
        frmProducao Producao = new frmProducao();
        frmEmProducao EmProducao = new frmEmProducao();
        PedeOrdemProd OrdemProducao;
        Tempos Times;
        #endregion

        public frmLinhas()
        { InitializeComponent(); }

        private void frmLinhas_Load(object sender, EventArgs e)
        {
            Dock = DockStyle.Fill;
            Program.Entrada.tmrLogin.Stop();

            Program.Entrada.lblStatus.Text = "Utilizador: " + frmEntrada.dvUsers[0][1].ToString();

            if (frmEntrada.dsFilkemp.Tables["dtLinhas"] != null) frmEntrada.dsFilkemp.Tables["dtLinhas"].Clear();
            daLinhas.Fill(frmEntrada.dsFilkemp.Tables["dtLinhas"]);

            #region Cria Botoes

            // Off sets
            int y = 10;
            int x = 0;
            for (int intLoop = 0; intLoop < frmEntrada.dsFilkemp.Tables["dtLinhas"].Rows.Count; intLoop++)
            {
                DataRow drLinhas = frmEntrada.dsFilkemp.Tables["dtLinhas"].Rows[intLoop];

                Button newbutton = new Button();
                newbutton.Font = new Font("Arial", 18, FontStyle.Bold);
                newbutton.FlatStyle = FlatStyle.System;
                newbutton.Width = 120;
                newbutton.Height = 120;

                if (intLoop % 5 == 0)
                {
                    if (intLoop == 0)
                        y = 10;
                    else
                        y += newbutton.Height + 10;

                    x = 0;
                }
                newbutton.Text = drLinhas["Prod_Lin"].ToString();
                newbutton.Name = "bt" + drLinhas[0].ToString();
                newbutton.Top = y;
                newbutton.Left = 10 + (x * (newbutton.Width + 10));
                x += 1;

                newbutton.Click += btn_clk;//Adiciona Evento a Botao Criado
                this.pnlLinhas.Controls.Add(newbutton);
            }
            #endregion

            if (frmEntrada.dsFilkemp.Tables["dtLinhas_Tarefas"] != null) frmEntrada.dsFilkemp.Tables["dtLinhas_Tarefas"].Clear();
            frmEntrada.daLinhas_Tarefas.Fill(frmEntrada.dsFilkemp.Tables["dtLinhas_Tarefas"]);
            dvLinhas_Tarefas = new DataView(frmEntrada.dsFilkemp.Tables["dtLinhas_Tarefas"]);
            dvLinhas_Tarefas.Sort = "Data Asc";

            frmEntrada.daTarefas.Fill(frmEntrada.dsFilkemp.Tables["dtTarefas"]);
            dvTarefas = new DataView(frmEntrada.dsFilkemp.Tables["dtTarefas"]);

            tmr.Enabled = true;
            tmr.Start();
            tmr_Tick(sender, e);
        }

        private void btn_clk(Object sender, EventArgs e)
        {
            tmr.Stop();
            tmr.Enabled = false;

            #region Declaraçoes
            frmDisplay Display = new frmDisplay();
            Display.MdiParent = Program.Entrada;
            EcraTarefas.MdiParent = Program.Entrada;
            Manutenção.MdiParent = Program.Entrada;
            Producao.MdiParent = Program.Entrada;
            EmProducao.MdiParent = Program.Entrada;
            #endregion

            numLinha = ((Button)sender).Text;
            Program.Entrada.lblStatus.Text = "Utilizador: " + frmEntrada.dvUsers[0][1].ToString();

            dvLinhas_Tarefas.RowFilter = string.Format("Linha={0}", numLinha);
            if (dvLinhas_Tarefas.Count > 0)
            {
                string Estado = dvLinhas_Tarefas[dvLinhas_Tarefas.Count - 1]["Estado"].ToString();
                #region Já tem registos na tabela_Linhas Tarefas

                switch (Estado)
                {
                    #region Em Producao
                    case "Em Producao":
                        EmProducao.Show();
                        this.Close();
                        this.Dispose();
                        break;
                    #endregion
                    #region Fim de Producao
                    case "Fim de Producao":
                        OrdemProducao = new PedeOrdemProd();
                        break;
                    #endregion
                    #region Tarefa Iniciada
                    case "I":
                        Display.Show();
                        this.Close();
                        this.Dispose();
                        break;
                    #endregion
                    #region Fim de Tarefa
                    case "F":
                        dvLinhas_Tarefas.RowFilter = string.Format("Linha Like '{0}' and (Estado='Em Producao' or Estado='Fim Producao')", numLinha);
                        if (dvLinhas_Tarefas.Count > 0 && dvLinhas_Tarefas[dvLinhas_Tarefas.Count - 1]["Estado"].ToString() == "Em Producao") EmProducao.Show();
                        else OrdemProducao = new PedeOrdemProd();
                        break;
                    #endregion
                    #region Arranque Linha
                    case "ArranqueLinha":
                        dvLinhas_Tarefas.RowFilter = string.Format("[Linha] = '{0}' and ([Estado] = 'I' or [Estado] = 'F' )", numLinha);
                        if (dvLinhas_Tarefas.Count > 0 && dvLinhas_Tarefas[dvLinhas_Tarefas.Count - 1]["Estado"].ToString() == "I")
                        {
                            Display.Show();
                            this.Close();
                            this.Dispose();
                        }
                        else
                        {
                            dvLinhas_Tarefas.RowFilter = string.Format("Linha={0} and (Estado='Em Producao' or Estado='Fim Producao')", numLinha);
                            if (dvLinhas_Tarefas.Count > 0 && dvLinhas_Tarefas[dvLinhas_Tarefas.Count - 1]["Estado"].ToString() == "Em Producao") EmProducao.Show();
                            else OrdemProducao = new PedeOrdemProd();
                        }
                        break;
                    #endregion
                    default:
                        if (Estado.Length > 1 && Estado.Substring(0, 3) == "Ped") Manutenção.Show();
                        break;
                }
            }
                #endregion
            else
            { OrdemProducao = new PedeOrdemProd(); }
        }

        //Timer to change Color of Buttons
        private void tmr_Tick(object sender, EventArgs e)
        {
            if (pnlLinhas.Controls.Count > 0 && tmr.Enabled)
            {
                foreach (Button btn in pnlLinhas.Controls)
                {
                    numLinha = btn.Text;
                    dvLinhas_Tarefas.RowFilter = string.Format("[Linha]='{0}'", numLinha);

                    if (dvLinhas_Tarefas.Count > 0)
                    {
                        btn.FlatStyle = FlatStyle.Standard;
                        string Estado = dvLinhas_Tarefas[dvLinhas_Tarefas.Count - 1]["Estado"].ToString();
                        switch (Estado)
                        {
                            case "Em Producao":
                                btn.BackColor = Color.Blue;
                                break;
                            case "I":
                                Times = new Tempos();
                                MudaCor(btn);
                                break;
                            case "F":
                                dvLinhas_Tarefas.RowFilter = string.Format("Linha Like '{0}' And (Estado='Em Producao' Or Estado='Fim Producao')", numLinha);
                                if (dvLinhas_Tarefas.Count > 0)
                                {
                                    if (dvLinhas_Tarefas[dvLinhas_Tarefas.Count - 1]["Estado"].ToString() == "Em Producao") btn.BackColor = Color.Blue;
                                    else btn.FlatStyle = FlatStyle.System;
                                }
                                break;
                            case "ArranqueLinha":
                                dvLinhas_Tarefas.RowFilter = string.Format("Linha Like '{0}' And (Estado='I' Or Estado='F')", numLinha);
                                if (dvLinhas_Tarefas.Count > 0)
                                {
                                    Estado = dvLinhas_Tarefas[dvLinhas_Tarefas.Count - 1]["Estado"].ToString();
                                    if (Estado == "I") { Times = new Tempos(); MudaCor(btn); }
                                    else
                                    {
                                        dvLinhas_Tarefas.RowFilter = string.Format("Linha Like '{0}' And (Estado='Em Producao' Or Estado='Fim de Producao')", numLinha);
                                        Estado = dvLinhas_Tarefas[dvLinhas_Tarefas.Count - 1]["Estado"].ToString();
                                        if (Estado == "Em Producao") btn.BackColor = Color.Blue;
                                        else btn.FlatStyle = FlatStyle.System;
                                    }
                                }
                                else
                                {
                                    dvLinhas_Tarefas.RowFilter = string.Format("Linha Like '{0}' And (Estado='Em Producao' Or Estado='Fim de Producao')", numLinha);
                                    Estado = dvLinhas_Tarefas[dvLinhas_Tarefas.Count - 1]["Estado"].ToString();
                                    if (Estado == "Em Producao") btn.BackColor = Color.Blue;
                                    else btn.FlatStyle = FlatStyle.System;
                                }
                                break;

                            default:
                                if (Estado.IndexOf("Ped") != -1) btn.BackColor = Color.BlueViolet;
                                else btn.FlatStyle = FlatStyle.System;
                                break;
                        }
                    }
                    else btn.FlatStyle = FlatStyle.System;
                }
            }
        }

        private void MudaCor(Button btn)
        {
            Times.AvgTimes_();
            Times.Duracao_();
            double dDuracao = Convert.ToDouble(Times.Duracao.TotalSeconds);
            double dMedia = Convert.ToDouble(Times.Media.TotalSeconds);

            btn.FlatStyle = FlatStyle.Standard;
            if (dDuracao > dMedia && dMedia > 0)
            {
                if (dDuracao > dMedia + 0.25 * dMedia) btn.BackColor = Color.Red;
                else btn.BackColor = Color.Orange;
            }
            else if (Times.Duracao.ToString() != "00:00:00") btn.BackColor = Color.Green;
        }
    }
}
